package com.longe.netty.byteBuf;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;

public class NettyByteBuf {

    public static void main(String[] args) {

        //1. 创建对象，该对象包含一个数组arr, 是一个byte[5]
        //2. 在netty 的buffer中，不需要使用flip 进行反转, 底层维护了 readerIndex 和 writerIndex
        //3. 通过 readerIndex 和 writerIndex 和 capacity, 将buffer分成三个区域
        // 0---readerIndex 已经读取的区域
        // readerIndex---writerIndex, 可读的区域
        // writerIndex -- capacity, 可写的区域
        ByteBuf byteBuf = Unpooled.buffer(5);

        for (int i = 0; i < byteBuf.capacity(); i++) {
            byteBuf.writeByte(i);
        }

        System.err.println("capacity = " + byteBuf.capacity());
        for (int i = 0; i < byteBuf.capacity(); i++) {
            System.err.println("readerIndex = " + byteBuf.readerIndex());
            System.err.println("writerIndex = " + byteBuf.writerIndex());
            byteBuf.readByte(); //读取一个字节
            System.err.println("读取一个字节后还可读的字节数：" + byteBuf.readableBytes());
        }

        System.err.println("---------------再读一遍-----------------");
        byteBuf.resetReaderIndex();
        for (int i = 0; i < byteBuf.capacity(); i++) {
            System.err.println("readerIndex = " + byteBuf.readerIndex());
            System.err.println("writerIndex = " + byteBuf.writerIndex());
            byteBuf.readByte(); //读取一个字节
            System.err.println("读取一个字节后还可读的字节数：" + byteBuf.readableBytes());
        }
        System.err.println("执行完毕");

        byteBuf.clear();
        System.err.println(byteBuf.readerIndex());
    }
}
